<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Class 继承</title>
</head>
<body>
    <script>
        class Phone{
            // constructor 构造函数名字是固定
            constructor(brand,price){
                this.brand = brand;
                this.price = price;
            }
            // 父类的call方法
            call(){
                console.log('父类打电话');
            }

            static test(){
                console.log('test');
            }
        }

        let p1 = new Phone();
        p1.call();
        console.log(typeof p1);


        // extends继承
        class SmartPhone extends Phone{
            // 自己的属性
            constructor(brand,price,pixel,storage){
                // 1. 继承父类的属性 super运行父类的 constructor 并且this指向是正确的
                super(brand,price); // Phone.call(this,brand,price);
                // 2. 添加自己的属性
                this.pixel = pixel;
                this.storage = storage;
            }
            // 子类的call方法
            call(){
                console.log('子类的call');
            }
            video(){
                console.log('看视频');
            }
        }

        let sp1 = new SmartPhone('小米',4000,2000,'256g');
        console.log(sp1);
        sp1.call();
        SmartPhone.test();

        // 方法：
        // 1. 实例方法: 属于 类new出来的实例        在类的原型对象上
        // 2. 静态方法: 属于 类本身，不属于任何实例
        //             用着方便，一般都是工具方法

        // Object.create(obj,{

        // })

        // let obj1 = new Object();
        // let obj2 = obj1.create(obj,{

        // })

        function Fn(){
            console.log(this);
        }

        Fn.call()
        console.dir(Fn);

    </script>
</body>
</html>